package main

import (
	"fmt"
	"math"
)

var names = "猪猪侦探"

const (
	name = "猪猪侦探"
	age  = 18
)

var (
	ages = 18
)

func main() {
	var words = "hello,world"
	/*
		1.	变量定义 可以直接批量定义
		2.有自动类型判断,所以能够混写
		3.若需要注明类型,类型写在后面
	*/
	variableInitValue()
	variableTypeDeduction()
	consts()
	enums()
	fmt.Println(words)
	fmt.Println(variable())
	fmt.Println(name, ages, names, age)
}

func variable() int {
	/*
		通过 := 可以自动类型判断
		同时 int 和 int64 是不同的类型
	*/
	//n := 1

	//若直接返回 int64 会返回一个 int64 初始值为1
	//return int64(1)

	/*
		声明变量时 需要加上 var 同时 在后面跟上 类型
		不曾初始化时,int类型带有初始值,是0
	*/
	//var n int
	//n = 2

	/*
		不写类型,它会做类型推断
	*/
	var n = 3

	return n
}

func variableInitValue() {
	var a, b = 3, "b"
	var s string = "擎天猪"
	fmt.Println(a, b, s)
}

func variableTypeDeduction() {
	var a, b, c, s = 2, 2.9, true, "可爱奶油猪猪头"
	fmt.Println(a, b, c, s)
}

func consts() {
	/*
		常量,可以直接敲出来一群,放在一起
		而且,我发现,它会有代码提示,还是说一个默认值
	*/
	const (
		name = "zz"
		cc   = 1
	)
	var d int
	const a, b, c = 3, 4, "猪猪警长"
	d = int(math.Sqrt((a*a + b*b)))
	fmt.Printf(c + "严密的计算,得出,边长为")
	fmt.Println(a, b, "的三角形的,斜边长为: ", d)
	fmt.Println(name, cc)
	fmt.Println(name)
}

func enums() {
	const (
		cpp = iota
		java
		python
		golang
	)
	const (
		b = 1 << (10 * iota)
		kb
		mb
		gb
		tb
		pb
	)

	println(cpp, java, python, golang)
	println(b, kb, mb, gb, tb, pb)
}
